package com.itfenghuang.day02.mapper.imp;

import com.itfenghuang.bean.User;
import com.itfenghuang.day02.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/**
 * 数据访问ceng
 */
@SuppressWarnings("all")
public class UserMapperImp implements UserMapper {
    /**
     * 测试查询全部用户
     *  测试步骤:
     *      1).加载核心配置文件
     *      2).获取SqlSession工厂对象
     *      3).通过SqlSession工厂对象获取SqlSession对象
     *      4).执行sql语句
     *      5).处理数据
     *      6).释放资源
     * 作业:
     *  修改,通过id修改账号,密码
     */
//    @Test
//    public void selectAllUser() throws IOException {
//        //1).加载核心配置文件
//        // org.apache.ibatis.io.Resources;
//        // Resources:加载资源工具类  加载mybatis核心文件的
//        InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//        //2).获取SqlSession工厂对象
//        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//        //3).通过SqlSession工厂对象获取SqlSession对象
//        SqlSession sqlSession = factory.openSession();
//        //4).执行sql语句
//        List<User> list = sqlSession.selectList("UserMapper.selectALLUser");
//        //5).处理数据
//        for (User user : list) {
//            System.out.println(user);
//        }
//        //6).释放资源
//        sqlSession.clearCache();
//        is.close();
//    }
//
//    //根据条件查询单个用户
//    @Test
//    public void selectUser() throws IOException {
//        //1.加载核心配置文件
//        InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//        //2.获取SqlSession工厂对象
//        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//        //3.通过SqlSession工厂对象获取SqlSession对象
//        SqlSession sqlSession = factory.openSession();
//        //4.执行sql语句
//        User user = new User(0, "tom", "123");
//        User tom = sqlSession.selectOne("UserMapper.selectUser",user);
//        //5.处理数据
//        System.out.println(tom);
//        //6.释放资源
//        sqlSession.close();
//        is.close();
//    }
//
//    /**
//     * 添加一个用户
//     */
//    @Test
//    public void addUser() throws IOException {
//        //1.加载配置核心文件
//        InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//        //2.获取SqlSession工厂对象
//        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//        //3.通过SqlSession工厂对象获取SqlSession对象
//        //SqlSession openSession(boolean var1);  传一个true进去,自动提交事务
//        //SqlSession 作用: 用来执行sql语句, 事务管理
//        SqlSession sqlSession = factory.openSession(true);
//        //4.执行sql语句  result受影响的行数
//        User user = new User(5, "小爱", "321");
//        int result = sqlSession.insert("UserMapper.addUser",user);
//        System.out.println(result);
//        //释放资源
//        //sqlSession.commit();
//        sqlSession.close();
//        is.close();
//    }
//    @Test
//    public void deleteUser() throws IOException {
//        //1.加载配置核心文件
//        InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//        //2.获取SqlSession工厂对象
//        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//        //3.通过SqlSession工厂对象获取SqlSession对象
//        //SqlSession openSession(boolean var1);  传一个true进去,自动提交事务
//        //SqlSession 作用: 用来执行sql语句, 事务管理
//        SqlSession sqlSession = factory.openSession(true);
//        //4.执行sql语句  result受影响的行数
//        int result = sqlSession.delete("UserMapper.deleteUser",4);
//        System.out.println(result);
//        //5.释放资源
//        sqlSession.close();
//        is.close();
//    }
    @Override
    public User selectUser1(int id) {
        InputStream is=null;
        SqlSession sqlSession=null;
        User user=null;
        try {
            //1.加载核心配置文件
            is = Resources.getResourceAsStream("MyBatisConfig.xml");
            //2.获取SqlSession工厂对象
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
            //3.通过SqlSession工厂对象获取SqlSession对象
            sqlSession = factory.openSession();
            //4.执行sql语句
            User user1 = new User(0, "tom", "123");
            user = sqlSession.selectOne("UserMapper.selectUser",user1);
            //5.处理数据
            System.out.println(user);
            //6.释放资源
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (sqlSession!=null){
                sqlSession.close();
            }
            if (is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return user;
    }
}
